﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Tecnosop.Dominio;
using Tecnosop.WebUI.Infrastructure.Notification;
using Tecnosop.WebUI.Models;
namespace Tecnosop.WebUI.Controllers
{
    [Authorize]
    public partial class NotaDebitoController : Controller
    {
        private Entidades db = new Entidades();

        //
        // GET: /NotaDebito/

        public virtual ViewResult Index()
        {
            var notas = db.NOTA_DE_DEBITO.Where(n => n.VISIBLE ?? false);
            return View(notas); ;
        }

        //
        // GET: /NotaDebito/Details/5

        public virtual ActionResult Details(string id)
        {
            NOTA_DE_DEBITO n = db.NOTA_DE_DEBITO.Find(Convert.ToInt32(id));
            return View(n);
        }

        //
        // GET: /NotaDebito/Create

        public virtual ActionResult Create()
        {
            ViewBag.NUMERO_FACTURA = new SelectList(db.FACTURA, "NUMERO_FACTURA", "COND_DE_VENTA");
            return View();
        } 

        //
        // POST: /NotaDebito/Create

        [HttpPost]
        public virtual ActionResult Create(NotaDebitoViewModel notaVm)
        {
            //if (ModelState.IsValid)
            //{
            //    try
            //    {
                    NOTA_DE_DEBITO nota = new NOTA_DE_DEBITO
                    {

                        COMENTARIO = notaVm.COMENTARIO,
                        FECHA_INSTALACION = notaVm.FECHA,
                        //ID_NOTA_CREDITO = 1,
                        ID_NOTA_DEBITO = notaVm.ID_NOTA_DEBITO,
                        RAZON_SOCIAL_ND = notaVm.EsRazonSocialTecnosopNota.Value ? "Comercializadora Tecnosop" : "Juan Carlos Maldonado Huerta",
                        MONTO = notaVm.MONTO,
                        NUMERO_FACTURA = notaVm.NUMERO_FACTURA,
                        VISIBLE = true,

                        RAZON_SOCIAL = notaVm.EsRazonSocialTecnosopFactura.Value ? "Comercializadora Tecnosop" : "Juan Carlos Maldonado Huerta"


                    };
                    db.NOTA_DE_DEBITO.Add(nota);
                    db.SaveChanges();
                    this.ShowMessage(MessageType.Success, "Se ha creado exitosamente la nota de débito", true);
                    return RedirectToAction(Actions.Index());
                //}
            //    catch
            //    {
            //        this.ShowMessage(MessageType.Error, "Ocurrió un error al intentar agregar nota de débito.", true);
            //        return View(notaVm);
            //    }
            //}
            //this.ShowMessage(MessageType.Error, "Me salte a la otra parte", true);
            //return View(notaVm);
        }

        
        //
        // GET: /NotaDebito/Edit/5

        public virtual ActionResult Edit(int id)
        {
            NOTA_DE_DEBITO nota = db.NOTA_DE_DEBITO.Find(id);


            return View(nota);
        }

    

       
        // POST: /NotaCredito/Edit/5

        [HttpPost]
        public virtual ActionResult Edit(NOTA_DE_DEBITO nota)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    // TODO: Add update logic here

                    NOTA_DE_DEBITO notaEditada =  db.NOTA_DE_DEBITO.Find(nota.ID_NOTA_DEBITO);
                    
                         notaEditada.COMENTARIO = nota.COMENTARIO;
                         notaEditada.FECHA_INSTALACION = nota.FECHA_INSTALACION;
                         notaEditada.MONTO = nota.MONTO;
                    
                    db.Entry(notaEditada).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }
            return View();
        }

        public virtual ActionResult Delete(int id)
        {
            try
            {
                NOTA_DE_DEBITO nota = db.NOTA_DE_DEBITO.Find(id);
                this.ShowMessage(MessageType.Warning, "Está a punto de borrar la nota de crédito [" + nota.ID_NOTA_DEBITO + "].", false);
                return View(nota);
            }
            catch
            {
                this.ShowMessage(MessageType.Error, "Ocurrio un error al intentar eliminar el cliente.");
                return RedirectToAction(Actions.Index());
            }
        }

        //
        // POST: /NotaCredito/Delete/5

        [HttpPost, ActionName("Delete")]
        public virtual ActionResult DeleteConfirmed(int id)
        {
            try
            {
                NOTA_DE_DEBITO nota = db.NOTA_DE_DEBITO.Find(id);
                nota.VISIBLE = false;

                db.Entry(nota).State = EntityState.Modified;
                //db.CLIENTE.Remove(cliente);
                db.SaveChanges();
                this.ShowMessage(MessageType.Success, "La nota de crédito fue eliminado exitosamente.");
                return RedirectToAction(Actions.Index());
            }
            catch
            {
                this.ShowMessage(MessageType.Error, "Ocurrio un error al intentar eliminar el cliente.");
                return RedirectToAction(Actions.Delete(id));
            }
        }

        [ChildActionOnly]
        public virtual ActionResult Search()
        {
            return PartialView();
        }

        public virtual ActionResult Busqueda()
        {
            return View();
        }


        public virtual ActionResult ResultadoBusqueda(string Criterios, string AreaBusqueda)
        {
            int id;
            switch (Criterios)
            {
                case "Rut":
                    return View(new ResultadoBusquedaNotaDebitoViewModel
                    {
                        Resultado = db.NOTA_DE_DEBITO.Where(c => c.FACTURA.FACTURA_VENTA_DIRECTA.RUT_CLIENTE == AreaBusqueda).ToList(),
                        CriterioParaOrdenar = Criterios
                    });
                case "NumeroNotaDebito":
                     id = Convert.ToInt32(AreaBusqueda);
                    return View(new ResultadoBusquedaNotaDebitoViewModel
                    {
                        
                        Resultado = db.NOTA_DE_DEBITO.Where(c => c.ID_NOTA_DEBITO == id).ToList(),
                        CriterioParaOrdenar = Criterios
                    });
                case "Tecnosop":
                     id = Convert.ToInt32(AreaBusqueda);
                    return View(new ResultadoBusquedaNotaDebitoViewModel
                    {
                        Resultado = db.NOTA_DE_DEBITO.Where(c => c.NUMERO_FACTURA==id).ToList(),
                        CriterioParaOrdenar = Criterios
                   });
                default:
                    return PartialView(Views.Search);
            }
        }


        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}